package com.priox.sigar.jsf;

import com.priox.sigar.application.mappers.AcreedorMapper;
import com.priox.sigar.client.dto.AcreedorDTO;
import com.priox.sigar.client.flt.AcreedorFlt;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 * User: JAVA
 * Date: 29/09/13
 * Time: 12:01 PM
 * To change this template use File | Settings | File Templates.
 */
public class LazyAcreedorModel   extends LazyDataModel<AcreedorDTO> {
    AcreedorMapper acreedorMapper;
    private AcreedorFlt acreedorFlt;
    private List<AcreedorDTO> acreedores = new ArrayList<AcreedorDTO>();



    public LazyAcreedorModel(AcreedorMapper acreedorMapper, AcreedorFlt acreedorFlt) {
        this.acreedorMapper = acreedorMapper;
        this.acreedorFlt = acreedorFlt;
    }

    private Integer calcularTamanioTotal() {
        Integer numeroNotificaciones = acreedorMapper.total(acreedorFlt);
        return numeroNotificaciones < 500 ? numeroNotificaciones:500;
    }

    @Override
    public List<AcreedorDTO> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {

        Integer totalSize= calcularTamanioTotal();
        int start = first;
        int end = first + pageSize;

        if(end> totalSize){
            end=totalSize;
        }
        acreedorFlt.setStart(start);
        acreedorFlt.setEnd(end);
        acreedores = acreedorMapper.find(acreedorFlt);
        setRowCount(totalSize);
        return acreedores;
    }


    @Override
    public AcreedorDTO getRowData(String rowKey) {
        for(AcreedorDTO n : acreedores) {
            if(n.getAcreedorId().equals(Integer.valueOf(rowKey)))
                return n;
        }

        return null;
    }

    @Override
    public Object getRowKey(AcreedorDTO n) {
        return n.getAcreedorId();
    }

    @Override
    public void setRowIndex(int rowIndex) {
        if (rowIndex == -1 || getPageSize() == 0) {
            super.setRowIndex(-1);
        } else{

            super.setRowIndex(rowIndex % getPageSize());
        }

    }
    
}
